[IA64] add perfcounter for vTLB flush.
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Tue, 3 Oct 2006 03:34:47 +0000 (21:34 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Tue, 3 Oct 2006 03:34:47 +0000 (21:34 -0600)
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
xen/arch/ia64/xen/domain.c
xen/arch/ia64/xen/vhpt.c
xen/include/asm-ia64/perfc_defn.h

index 56816204668bb965b3d3aa20a78813bfbf04c023..9433affbe806b1062e660ceb2d9756a0d4b8232f 100644 (file)
@@ -101,6 +101,7 @@ static void flush_vtlb_for_context_switch(struct vcpu* vcpu)
                        vhpt_flush();
                }
                local_flush_tlb_all();
+               perfc_incrc(flush_vtlb_for_context_switch);
        }
 }
 
index f8db5c6e17aa4b54070e453291a4b62c6b7af003..b439ccda42cdc85de4e2ef5aed0aa4bcfe1e638a 100644 (file)
@@ -155,6 +155,8 @@ void vcpu_flush_vtlb_all(struct vcpu *v)
        /* We could clear bit in d->domain_dirty_cpumask only if domain d in
           not running on this processor.  There is currently no easy way to
           check this.  */
+
+       perfc_incrc(vcpu_flush_vtlb_all);
 }
 
 static void __vcpu_flush_vtlb_all(void *vcpu)
@@ -178,6 +180,7 @@ void domain_flush_vtlb_all (void)
                                                 __vcpu_flush_vtlb_all,
                                                 v, 1, 1);
        }
+       perfc_incrc(domain_flush_vtlb_all);
 }
 
 static void cpu_flush_vhpt_range (int cpu, u64 vadr, u64 addr_range)
@@ -200,6 +203,7 @@ void vcpu_flush_tlb_vhpt_range (u64 vadr, u64 log_range)
        cpu_flush_vhpt_range (current->processor, vadr, 1UL << log_range);
        ia64_ptcl(vadr, log_range << 2);
        ia64_srlz_i();
+       perfc_incrc(vcpu_flush_tlb_vhpt_range);
 }
 
 void domain_flush_vtlb_range (struct domain *d, u64 vadr, u64 addr_range)
@@ -236,6 +240,7 @@ void domain_flush_vtlb_range (struct domain *d, u64 vadr, u64 addr_range)
 
        /* ptc.ga  */
        ia64_global_tlb_purge(vadr,vadr+addr_range,PAGE_SHIFT);
+       perfc_incrc(domain_flush_vtlb_range);
 }
 
 static void flush_tlb_vhpt_all (struct domain *d)
index 58d52a97ff2a6c5c688159ac307449bb93970e98..964df13a51357ee28a79913fdeafe0878157908c 100644 (file)
@@ -107,3 +107,12 @@ PERFSTATUS(privop_addr_##name##_overflow, "privop-addrs overflow " #name)
 PERFPRIVOPADDR(get_ifa)
 PERFPRIVOPADDR(thash)
 #endif
+
+// vhpt.c
+PERFCOUNTER_CPU(vcpu_flush_vtlb_all,            "vcpu_flush_vtlb_all")
+PERFCOUNTER_CPU(domain_flush_vtlb_all,          "domain_flush_vtlb_all")
+PERFCOUNTER_CPU(vcpu_flush_tlb_vhpt_range,      "vcpu_flush_tlb_vhpt_range")
+PERFCOUNTER_CPU(domain_flush_vtlb_range,        "domain_flush_vtlb_range")
+
+// domain.c
+PERFCOUNTER_CPU(flush_vtlb_for_context_switch,  "flush_vtlb_for_context_switch")